<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>原型链继承</title>
</head>
<body>
<script>
    /*
    * 继承 子类继承父类的属性和方法
    * 目的 可以让子类的 实例 能够使用父类的属性和方法
    *   父类 A
    *   子类 B
    * */
    //类 ==> 构造函数


    //原型链继承
    // 子类构造函数.prototype = 父类的实例;
    // 子类构造函数.prototype.constructor = 子类构造函数

    /*
    * 特点:
    *   1.js继承是把父类的原型放到子类的原型链上,实例想要调用这些方法,其实是基于__proto__原型链的机制查找完成的
    *   2.子类可以重写父类上的属性和方法
    *   3.父类中私有的或者公有的属性和方法, 最后都会变成子类公有的属性和方法
    * */



    //父类
    function A(x) {
        this.x = x
    }
    A.prototype.getX = function () {
        console.log(this.x);
    }

    //子类
    function B(y) {
        this.y = y
    }
    B.prototype = new A(100);//{x:100} ==> __proto__.getX =fn
    B.prototype.constructor = B;
    B.prototype.getY = function () {
        console.log(this.y);
    }

    let b = new B(200);
    b.x //==> undefined
    b.getX(); //==> b.getX is not a function

    console.log(a);//{x:100} ==> __proto__.getX =fn
    console.log(b);//{y:200} ==> __proto__.getY =fn


</script>
</body>
</html>